/**
 * axios封装
 * 请求拦截、响应拦截、错误统一处理
 */
const axios = require('axios')
const { APP__URL__SERVER } = require('./index').settings

/**
 * 请求失败后的错误统一处理
 * @param {Number} status 请求失败的状态码
 */
const errorHandle = (status, other) => {
  // 状态码判断
  switch (status) {
    // 401: 未登录状态，跳转登录页
    case 401:
      break
    // 403 token过期
    // 清除token并跳转登录页
    case 403:
      // 登录过期，请重新登录
      break
    // 404请求不存在
    case 404:
      // 请求的资源不存在
      break
    default:
    // 其它 console.log(other)
  }
}

// 创建axios实例
const instance = axios.create({
  timeout: 1000 * 12,
  baseURL: APP__URL__SERVER,
  retry: {
    retries: 3
  },
  // 开发模式下开启debug
  // debug: process.env._ENV !== 'production',
  // 设置不同环境的请求地址
  withCredentials: true
})
// 设置post请求头
// instance.defaults.headers.post['Content-Type'] =
//   'application/x-www-form-urlencoded'
/**
 * 请求拦截器
 * 每次请求前，如果存在token则在请求头中携带token
 */
instance.interceptors.request.use(
  (config) => {
    // console.log(config)
    return config
  },
  (error) => Promise.error(error)
)

// 响应拦截器
instance.interceptors.response.use(
  // 请求成功
  (res) => {
    if (res.status === 200) {
      // console.log(res)
      return Promise.resolve(res)
    } else {
      return Promise.reject(res)
    }
  },
  // 请求失败
  (error) => {
    const { response } = error
    if (response) {
      // 请求已发出，但是不在2xx的范围
      errorHandle(response.status, response.data.message)
      return Promise.reject(response)
    } else {
    }
  }
)

module.exports = instance
